package com.partterns.singleton;

/**
 单例模式
 类负责创建自己的对象，同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式，可以直接访问，不需要实例化该类的对象。
 1、单例类只能有一个实例。
 2、单例类必须自己创建自己的唯一实例。
 3、单例类必须给所有其他对象提供这一实例。
 意图：保证一个类仅有一个实例，并提供一个访问它的全局访问点。
 单例模式有很多实现方式：
 1.懒汉式，线程不安全
 2.懒汉式，线程安全
 3.饿汉式。本示例。类加载时创建对象，浪费内存
 4.双检锁/双重校验锁，这种方式采用双锁机制，安全且在多线程情况下能保持高性能
 5.登记式/静态内部类，这种方式能达到双检锁方式一样的功效，但实现更简单。对静态域使用延迟初始化，应使用这种方式而不是双检锁方式。
 6。枚举，实现单例模式的最佳方法。它更简洁，自动支持序列化机制，绝对防止多次实例化。
 */
public class SingletonObject {
    //创建本类的一个对象
    private static SingletonObject instance=new SingletonObject();
    //让构造函数私有化，这样该类不会被实例化
    private SingletonObject(){};
    //获取唯一可用对象
    public static SingletonObject getInstance(){
        return instance;
    }
    public void showMessage(){
        System.out.println("hello,单例模式");
    }

}
